遞迴 (Recursion) 在程式設計中是一個強大的概念,
指的是一個函式在它的定義中直接或間接地呼叫自己。
就像一面鏡子不斷地反射自己的影像一樣,
遞迴函式會不斷地呼叫自己,直到滿足某個條件為止。
形象比喻:
想像你在一個房間裡,房間裡有一面鏡子,鏡子對著牆壁。
你站在鏡子前,鏡子裡會反射出你的影像。這個影像又在鏡子裡產生了一個更小的影像,
如此不斷重複。這就像一個函式不斷地呼叫自己一樣。
Python 遞迴的特性:
基底條件 (Base Case): 每個遞迴函式都必須有一個或多個基底條件,當滿足這個條件時,函式不再呼叫自己,而是直接返回結果。這就像鏡子對著牆壁,影像最終會消失。
遞迴關係式 (Recursive Case): 函式會呼叫自己,
但參數會有所變化,讓函式逐漸接近基底條件。這就像鏡子中的影像越來越小。
簡單的遞迴範例:計算階乘
def factorial(n):
if n == 0:
return 1 # 基底條件:0 的階乘為 1
else:
return n * factorial(n - 1) # 遞迴關係式
解釋:
當 n 等於 0 時,直接返回 1。
否則,返回 n 乘以 n-1 的階乘。
函式會不斷地呼叫自己,直到 n 等於 0 為止。
-解決複雜問題: 遞迴可以簡潔地解決一些複雜的問題,例如樹的遍歷、圖的搜索等。
-描述遞歸結構: 對於具有遞歸定義的問題,遞迴函式能更自然地表達問題的解法。
-函式式編程: 遞迴是函式式編程的重要概念。
效率問題: 過多的遞迴呼叫可能會導致棧溢出,影響程式性能。
難以理解: 遞迴的思維方式對於初學者來說可能比較抽象。
問題具有遞歸結構。
問題可以分解為更小的子問題,且子問題與原問題具有相同的形式。
基底條件明確。
階乘是一個數學概念,表示從 1 開始連續乘到這個數的所有正整數的積。用數學符號「!」表示。
例如:
5 的階乘,記作 5!,等於 5 × 4 × 3 × 2 × 1 = 120。
n 的階乘,記作 n!,等於 n × (n-1) × (n-2) × ... × 3 × 2 × 1。
0 的階乘定義為 1,也就是 0! = 1。
階乘的值增長非常快,即使是比較小的數字,其階乘也會是一個很大的數。
-密碼
-抽獎
-分配工作
-科學實驗
def factorial_recursive(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial_recursive(n - 1)
# 計算4的階乘
result = factorial_recursive(4)
print(result) # 输出:24
費氏數列從 0 和 1 開始,之後的每個數字都是前兩個數字的和。也就是說:
費氏數列的前幾項是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
f(0) = 0
f(1) = 1
f(2) = f(1) + f(0) = 1 + 0 = 1
f(3) = f(2) + f(1) = 1 + 1 = 2
f(4) = f(3) + f(2) = 2 + 1 = 3
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (當 n > 1)